function sortNodesByKeys(nodes) {
  let nodeMap = {};

  // 将节点存储到对象中以便通过key访问
  nodes.forEach(node => {
    nodeMap[node.key] = node;
  });

  let sortedNodes = [];
  let visitedNodes = {};

  // 通过深度优先搜索（DFS）对节点进行排序
  function dfs(nodeKey) {
    if (!visitedNodes[nodeKey]) {
      // 标记当前节点已访问
      visitedNodes[nodeKey] = true;

      // 获取当前节点
      let node = nodeMap[nodeKey];

      // 递归访问前置节点
      if (node.preKeys && Array.isArray(node.preKeys)) {
        node.preKeys.forEach(preKey => dfs(preKey));
      } else if (node.preKeys) {
        dfs(node.preKeys);
      }

      // 将当前节点添加到排序后的节点列表
      sortedNodes.push(node);
    }
  }

  // 对每个节点进行排序
  nodes.forEach(node => {
    dfs(node.key);
  });

  return sortedNodes;
}

export {
  sortNodesByKeys
}